package com.example.demo.pojo.dto.dingtalk;

import cn.hutool.core.collection.CollUtil;
import com.example.demo.enums.DingMsgTypeEnum;
import lombok.Data;

import java.util.ArrayList;

/**
 * 钉钉机器人markdown类型消息通知请求dto
 *
 * @author TongDaShuai
 * @since 2021/12/14
 */
@Data
public class MarkdownReqDto extends BaseRobotMsgNotifyReqDto {


    /**
     * markdown类型消息
     */
    private MarkdownDto markdown;

    /**
     * 构建请求参数
     *
     * @return
     */
    public static MarkdownReqDto build() {
        MarkdownReqDto req = new MarkdownReqDto();
        req.setMsgtype(DingMsgTypeEnum.markdown.name());
        return req;
    }



    /**
     * 设置 markdown格式的消息
     *
     * @param text markdown格式的消息
     * @return
     */
    public MarkdownReqDto text(String text) {
        if (this.markdown == null) {
            this.markdown = new MarkdownDto();
        }
        this.markdown.text = text;
        // markdown类型的@其他人需要在text内容里要有@人的手机号
        if (this.getAt() != null && CollUtil.isNotEmpty(this.getAt().getAtMobiles())) {
            String atInfo = "";
            for (String atMobile : this.getAt().getAtMobiles()) {
                atInfo = " @" + atMobile;
            }
            this.markdown.text += "\n" + atInfo;
        }
        return this;
    }

    /**
     * 设置 首屏会话透出的展示内容。
     *
     * @param title 首屏会话透出的展示内容。
     * @return
     */
    public MarkdownReqDto title(String title) {
        if (this.markdown == null) {
            this.markdown = new MarkdownDto();
        }
        this.markdown.title = title;
        return this;
    }

    /**
     * 设置 需要@的人的手机号
     *
     * @param atMobile 需要@的人的手机号
     * @return
     */
    @Override
    public BaseRobotMsgNotifyReqDto atMobile(String atMobile) {
        // markdown类型的@其他人需要在text内容里要有@人的手机号
        this.markdown.text += "\n@" + atMobile;
        if (this.getAt() == null) {
            this.setAt(new AtDto());
        }
        if (this.getAt().getAtMobiles() == null) {
            this.getAt().setAtMobiles(new ArrayList<>());
        }
        this.getAt().getAtMobiles().add(atMobile);
        return this;
    }



    @Data
    public static class MarkdownDto {

        /**
         * 首屏会话透出的展示内容。
         */
        private String text;

        /**
         * markdown格式的消息。
         */
        private String title;

    }

}
